package top.minuy.structure.set;

import top.minuy.structure.linear.array.Array;
import top.minuy.structure.tree.avl.AVLTree;

/**
 * 基于AVL树实现的集合
 *
 * @author Minuy
 * @time 23:58
 * @date 2021/11/4
 */
public class AVLTreeSet<E extends Comparable<E>> implements Set<E> {

    private AVLTree<E> avlTree;

    public AVLTreeSet() {
        avlTree = new AVLTree<>();
    }

    /**
     * 向集合中添加元素
     *
     * @param e 要添加的元素
     */
    @Override
    public void add(E e) {
        avlTree.add(e);
    }

    /**
     * 删除集合中的元素
     *
     * @param e 要被删除的元素
     */
    @Override
    public void remove(E e) {
        avlTree.remove(e);
    }

    /**
     * 判断集合中是否存在某一元素
     *
     * @param e 要判断是否存在的元素
     * @return 元素是否存在
     */
    @Override
    public boolean contains(E e) {
        return avlTree.contains(e);
    }

    /**
     * 获得集合元素中的个数
     *
     * @return 集合中元素的个数
     */
    @Override
    public int getSize() {
        return avlTree.size();
    }

    /**
     * 、
     * 判断集合是否为空
     *
     * @return 集合是否为空
     */
    @Override
    public boolean isEmpty() {
        return avlTree.isEmpty();
    }

    /**
     * 获取所有的值
     *
     * @return Array<E> 所有的值组成的列表
     * @author Minuy
     * @date 2021/11/15 22:17
     */
    public Array<E> getArray() {
        return avlTree.getArray();
    }
}
